package collection;

import org.w3c.dom.ls.LSOutput;

import javax.crypto.spec.PSource;
import java.util.ArrayList;
import java.util.Collections;
import java.util.List;

/**
 * 我们常用的集合中:ArrayList,LinkedList,HashSet都不是并发安全的。
 * 在多线程并发操作时不要使用他们.
 * 但是Collections提供了将现有的集合转换为并发安全的集合相关方法.
 */
public class SyncCollectionDemo {
    public static void main(String[] args) {
        List<String> list = new ArrayList<>();
        list.add("one");
        list.add("two");
        list.add("three");
        list.add("四");
        list.add("5");
        System.out.println(list);
        /*
            Collections提供了静态方法;
            static List synchronizedList(List list)
            将给定的List集合转换为一个并发安全的List集合并返回
            static Set synchronizedSet(Set set)
            将给定的Set集合转换为一个并发安全的Set集合并返回
            static Collection synchronizedCollection(Collection c)
            将给定的Collection集合转换为一个并发安全的Collection集合并返回
         */
        list = Collections.synchronizedList(list);//创建了一个新的集合,转换为并发安全,并返回
        System.out.println(list);
        /** forEach():集合自身的遍历元素的方式 */
        //JDK8之后，集合提供了新的遍历元素方式:forEach方法基于lambda表达式遍历.
        list.forEach(
                (e)-> System.out.println(e)
        );
        /** lambda 支持:方法引用"::"*/
        list.forEach(System.out::println);



    }
}
